package com.avecsys.quotemanager.service.user;

import com.avecsys.quotemanager.exception.BusinessException;
import com.avecsys.quotemanager.pojos.BuyerUsersPojo;
import com.avecsys.quotemanager.pojos.SupplierUsersPojo;
import com.avecsys.quotemanager.pojos.SystemUsersPojo;
import com.avecsys.quotemanager.pojos.UserMasterPojo;
import com.avecsys.quotemanager.utils.TransactionStatus;

public interface UserMasterService {

	/**
	 * Method to save the system User Information
	 * 
	 * @param systemUsersPojo
	 * @return TransactionStatus
	 * @throws BusinessException
	 */
	public TransactionStatus saveSystemUser(
			SystemUsersPojo systemUsersPojo) throws BusinessException;
	
	/**
	 * Method to save the supplier User Information
	 * 
	 * @param supplierUsersPojo
	 * @return TransactionStatus
	 * @throws BusinessException
	 */
	public TransactionStatus saveSupplierUser(
			SupplierUsersPojo supplierUsersPojo) throws BusinessException;
	
	/**
	 * Method to save the Buyer User Information
	 * 
	 * @param buyerUsersPojo
	 * @return TransactionStatus
	 * @throws BusinessException
	 */
	public TransactionStatus saveBuyerUser(
			BuyerUsersPojo buyerUsersPojo) throws BusinessException;


	/**
	 * Method to return the userMasterPojo instance by id
	 * 
	 * @param userId
	 * @return UserMasterPojo
	 * @throws BusinessException
	 */
	public UserMasterPojo getUserMasterById(Long userId)
			throws BusinessException;

	/**
	 * Method to mark the supplier user information as deleted
	 * 
	 * @param supplierUsersPojo
	 * @return TransactionStatus
	 * @throws BusinessException
	 */
	public TransactionStatus deleteSupplierUser(
			SupplierUsersPojo supplierUsersPojo) throws BusinessException;
	
	/**
	 * Method to mark the system user information as deleted
	 * 
	 * @param systemUsersPojo
	 * @return TransactionStatus
	 * @throws BusinessException
	 */
	public TransactionStatus deleteSystemUser(
			SystemUsersPojo systemUsersPojo) throws BusinessException;

	/**
	 * Method to return the SupplierMasterPojo instance by id
	 * 
	 * @param parseLong
	 * @return SupplierUsersPojo
	 * @throws BusinessException
	 */
	public SupplierUsersPojo getSupplierUserById(long parseLong)
			throws BusinessException;
	
	/**
	 * Method to return the SystemUserPojo instance by id
	 * 
	 * @param parseLong
	 * @return SystemUserPojo
	 * @throws BusinessException
	 */
	public SystemUsersPojo getSystemUserById(long systemUserId)
			throws BusinessException;
	
	/**
	 * Method to mark the buyer user information as deleted
	 * 
	 * @param buyerUsersPojo
	 * @return TransactionStatus
	 * @throws BusinessException
	 */
	public TransactionStatus deleteBuyerUser(
			BuyerUsersPojo buyerUsersPojo) throws BusinessException;

	/**
	 * Method to return the BuyerUsersPojo instance by id
	 * 
	 * @param buyerId
	 * @return SupplierUsersPojo
	 * @throws BusinessException
	 */
	public BuyerUsersPojo getBuyerUserById(long buyerId)
			throws BusinessException;

}
